package br.com.wuo.karina.model.dao.impl;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;

import br.com.wuo.karina.model.Professor;
import br.com.wuo.karina.model.dao.ProfessorDao;

public class ProfessorDaoImpl implements ProfessorDao {
	
	private Connection conn;
	
	public ProfessorDaoImpl(){
		try {
			Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
			String database = "jdbc:odbc:Wuo";
			conn = DriverManager.getConnection(database);
						
		} catch (ClassNotFoundException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} catch (SQLException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	}

	@Override
	public void salvarProfessor(Professor professor) throws SQLException {
		
		String query = "INSERT INTO Professores(Nome, Sobrenome, Logradouro, Numero, Complemento, " +
				  						  "Cep, Bairro, Cidade, Estado, Naturalidade, Nacionalidade, Telefone, " +
				  						  "Celular, Rg, Cpf, Status) VALUES(?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)";
		
		PreparedStatement stmt = conn.prepareStatement(query);
		
		stmt.setString(1, professor.getNome());
		stmt.setString(2, professor.getSobrenome());
		stmt.setString(3, professor.getLogradouro());
		stmt.setInt(4, professor.getNumero());
		stmt.setString(5, professor.getComplemento());
		stmt.setString(6, professor.getCep());
		stmt.setString(7, professor.getBairro());
		stmt.setString(8, professor.getCidade());
		stmt.setString(9, professor.getEstado());
		stmt.setString(10, professor.getNaturalidade());
		stmt.setString(11, professor.getNacionalidade());
		stmt.setString(12, professor.getTelefone());
		stmt.setString(13, professor.getCelular());
		stmt.setString(14, professor.getRg());
		stmt.setString(15, professor.getCpf());
		stmt.setString(16, "A");
		
		stmt.executeUpdate();

	}

	@Override
	public Professor pesquisarProfessor(int cod) throws SQLException {
		
		String query = "SELECT Cod, Nome, Sobrenome, Logradouro, Numero, Complemento, Cep, Bairro, Cidade, Estado, Naturalidade, " +
							  "Nacionalidade, Telefone, Celular, Rg, Cpf " +
					   "FROM Professores " +
					   "WHERE Cod = ? " +
					   "AND Status = ?";
		
		PreparedStatement stmt = conn.prepareStatement(query);
		
		stmt.setInt(1, cod);
		stmt.setString(2, "A");
		
		ResultSet rs = stmt.executeQuery();
		rs.next();
		
		int codigo = rs.getInt("Cod");
		String nome = rs.getString("Nome");
		String sobrenome = rs.getString("Sobrenome");
		String logradouro = rs.getString("Logradouro");
		int numero = rs.getInt("Numero");
		String complemento = rs.getString("Complemento");
		String cep = rs.getString("Cep");
		String bairro = rs.getString("Bairro");
		String cidade = rs.getString("Cidade");
		String estado = rs.getString("Estado");
		String naturalidade = rs.getString("Naturalidade");
		String nacionalidade = rs.getString("Nacionalidade");
		String telefone = rs.getString("Telefone");
		String celular = rs.getString("Celular");
		String rg = rs.getString("Rg");
		String cpf = rs.getString("Cpf");
		
		Professor professor = new Professor(codigo, nome, sobrenome, logradouro, numero, complemento, cep, bairro, cidade, estado, naturalidade, nacionalidade, telefone, celular, rg, cpf);
		
		return professor;
	}

	@Override
	public void alterarProfessor(Professor professor) throws SQLException {

		String query = "UPDATE Professores SET " +
							"Nome = ? , " +
							"Sobrenome = ? , " +
							"Logradouro = ? , " +
							"Numero = ? , " +
							"Complemento = ? , " +
							"Cep = ? , " +
							"Bairro = ? , " +
							"Cidade = ? , " +
							"Estado = ? , " +
							"Naturalidade = ? , " +
							"Nacionalidade = ? , " +
							"Telefone = ? , " +
							"Celular = ? , " +
							"Rg = ? , " +
							"Cpf = ? , " +
						"WHERE Cod = ? " ;
		
		PreparedStatement professorStmt = conn.prepareStatement(query);
		
		professorStmt.setString(1, professor.getNome());
		professorStmt.setString(2, professor.getSobrenome());
		professorStmt.setString(3, professor.getLogradouro());
		professorStmt.setInt(4, professor.getNumero());
		professorStmt.setString(5, professor.getComplemento());
		professorStmt.setString(6, professor.getCep());
		professorStmt.setString(7, professor.getBairro());
		professorStmt.setString(8, professor.getCidade());
		professorStmt.setString(9, professor.getEstado());
		professorStmt.setString(10, professor.getNaturalidade());
		professorStmt.setString(11, professor.getNacionalidade());
		professorStmt.setString(12, professor.getTelefone());
		professorStmt.setString(13, professor.getCelular());
		professorStmt.setString(14, professor.getRg());
		professorStmt.setString(15, professor.getCpf());
		professorStmt.setInt(16, professor.getCodigo());
		
		professorStmt.executeUpdate();
							
	}

	@Override
	public void deletarProfessor(int cod) throws SQLException {
		String query = "UPDATE Professores SET " +
							"Status = ?  " +
						"WHERE Cod = ? ";

		PreparedStatement professorStmt = conn.prepareStatement(query);
		
		professorStmt.setString(1, "I");
		professorStmt.setInt(2, cod);
		
		professorStmt.executeUpdate();

	}

	@Override
	public ArrayList<String> getAllProfessor() throws SQLException {
		ArrayList<String> professores  = new ArrayList<>();
		
		String query = "SELECT Cod, Nome, Sobrenome FROM Professores WHERE STATUS = ? "; 
		
		PreparedStatement stmt = conn.prepareStatement(query);
		
		stmt.setString(1, "A");
		
		ResultSet rs = stmt.executeQuery();
		
		
		while(rs.next()){
			int codigo = rs.getInt("Cod");
			String nome = rs.getString(2);
			String sobrenome = rs.getString("Sobrenome");
			
			String data = codigo + " - " + nome + " " + sobrenome;
			professores.add(data);			
		}
		
		return professores;
	}

}
